智能合约开发 ============ 编写合约 -------- 参考源码样例 .../github.com/xuperchain/xuperunion/contractsdk/go/example/counter/counter.go 主要实现一个struct的三个方法,initialize,invoke和query,来实现自己的逻辑 wasm合约 -------- 部署合约 ^^^^^^^^ 编译 >>>> 注意合约编译环境与源码编译环境一致 .. code-block:: bash :linenos: GOOS=js GOARCH=wasm go build 将编译好的合约二进制counter放到目录node/data/blockchain/${chain name}/native/下 其中${chain name}=xuper,因为样例是xuper链 部署 >>>> .. code-block:: bash :linenos: # 便捷方式 ## 账户下权限AK是自己,提前创建好账号,并保证账号下有钱 ./xchain-cli wasm deploy --account XC1111111111110600@xuper --cname counter -H localhost:37101 data/blockchain/xuper/native/counter # 多重签名场景 ## 提前维护好data/acl/addrs 需要的合作的地址 ./xchain-cli wasm deploy --account XC1111111111110600@xuper --cname counter -H localhost:37801 -m data/blockchain/xuper/native/counter ## 后续参看多重签名交易的后续check,sign,send场景 调用合约 >>>>>>>> .. code-block:: bash :linenos: ./xchain-cli wasm query -a '{"key":"counter"}' -H localhost:37101 counter # 便捷方式 ./xchain-cli wasm invoke -a '{"key":"counter"}' -H localhost:37101 counter # 多重签名场景 # 参考部署多重签名场景 ./xchain-cli wasm invoke -a '{"key":"counter"}' -H localhost:37101 counter -m native合约 ^^^^^^^^^^ 部署合约 >>>>>>>> 编译文件 '''''''' 编译合约,注意合约编译环境与源码编译环境一致 .. code-block:: bash :linenos: cd counter go build # 产出二进制counter 将编译好的合约二进制counter放到目录node/data/blockchain/${chain name}/native/下 其中${chain name}=xuper,因为样例是xuper链 激活合约 '''''''' - 发起提案 合约可以被使用需要发起提案,并投票,通过投票后方可激活合约 .. code-block:: bash :linenos: ./xchain-cli native activate --vote-height-offset 50 counter --version 1.0.0 -H 127.0.0.1:37101 # --vote-height-offset 表明距离当前高度多高后开始计票判断合约是否可以生效 # 执行完后得到proposal id - 投票 .. code-block:: bash :linenos: # data/keys下的账户对此提案投票token数量为amount ./xchain-cli vote --amount 100000499592699999999 --frozen 5550 abd9bf4472a833b096a5dc58847cc249b9765a49511d4a69e364e6651607bf94 #proposal id # 提案可以生效需要提案的票数占据总币量的51%,当然这是默认配置比例 - 确认是否激活 .. code-block:: bash :linenos: # 查看区块高度,是否达到提案生效高度 ./xchain systemstatus -H 127.0.0.1:37101 # 查看合约math的状态,status为1,代表激活成功 ./xchain-cli native status -H 127.0.0.1:37101 # status为1表示激活成功 调用合约 '''''''' - json文件示例 .. code-block:: python :linenos: { "module_name":"native", # 还可以是wasm "contract_name":"counter", # 自己编写的合约名字 "method_name": "initialize", # 还可写invoke和query "args" : { "key":"mycounter" # 调用的参数是kv形式 } } - 调用合约 .. code-block:: bash :linenos: # 参看发起多重签名交易 # data/acl/addrs 维护好调用合约所需的权限集合addrs ./xchain-cli multisig gen --desc desc.json --amount=1 --to $address -H 127.0.0.1:37101 # 查看合约预执行结果,通过文件visualtx.out ./xchain-cli multisig check # 继续进行后续操作... # 查询合约还可以通过此命令 ./xchain-cli native query counter --args '{"key":"mycounter"}' 访问权限管理 >>>>>>>>>>>> 合约方法的ACL控制参看 `设置合约方法权限样例 <../Getting%20Started/账号与权限管理.html#acl>`_